/* 
 * File:   BodyFactoryStatic.h
 * Author: mauro
 *
 * Created on 13 de octubre de 2014, 18:08
 */

#ifndef BODYFACTORYSTATIC_H
#define	BODYFACTORYSTATIC_H

#include <Box2D/Box2D.h>
#include <math.h>

#include "../Controller/SBSLog.h"

class BodyFactoryStatic {
private:
    b2World* world;

    b2Body *getCircle(b2Vec2* pos, float scale);

    // Crea un poligono regular
    // Si los lados (sides) supera 6 (cant max de lados) se creara un hexagono 
    // por defecto.
    b2Body* getPolygon(b2Vec2* pos, float scale, b2Vec2* size, int sides, float rotation);

public:

    BodyFactoryStatic();
    BodyFactoryStatic(b2World& world);

    // Si tiene 0 lados creara un circulo
    // Caso contrario, un poligono de los lados dados
    // SIDES: Si los lados son neg o 1 o 2 se creara un circulo por defecto
    //        Si los lados superan 6, se creara un hexagono por defecto
    // SCALE: Debe ser un numero entero mayor o igual a 1.
    b2Body* getBody(int sides, b2Vec2 *pos, b2Vec2 *size, float scale, float rotation);

    b2Body* getBodyParallellogram(b2Vec2* pos, b2Vec2* size, float alpha, float rotation);
    b2Body* getBodyTrapezium(b2Vec2* pos, b2Vec2* size, float alpha, float beta, float rotation);
    b2Body* getBonus(b2Vec2 *pos, b2Vec2 *size, int type);
    virtual ~BodyFactoryStatic();
};

#endif	/* BODYFACTORYSTATIC_H */

